package com.xxc.domain.strategy.model.entity;

import com.xxc.domain.strategy.model.valobj.RuleLogicCheckTypeVO;
import lombok.*;

/**
 * @author Fuzhengwei bugstack.cn @小傅哥
 * @description 规则动作实体
 * @create 2024-01-06 09:47
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RuleActionEntity<T extends RuleActionEntity.RaffleEntity> {

    /**
     * 做不做规则动作：ALLOW放行、TAKE_OVER拦截
     */
    private String code = RuleLogicCheckTypeVO.ALLOW.getCode();
    private String info = RuleLogicCheckTypeVO.ALLOW.getInfo();
    /**
     * 要做什么样的规则动作
     */
    private String ruleModel;
    /**
     * 这里的data就是包装里面的东西，其他的就是用来判断是什么、什么状态的，data才是要用的东西
     * 和外部类的T对应，在静态内部类中对data的类型做了限制
     */
     private T data;

    static public class RaffleEntity {

    }

    // 抽奖之前
    @EqualsAndHashCode(callSuper = true)
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    static public class RaffleBeforeEntity extends RaffleEntity {
        /**
         * 策略ID
         */
        private Long strategyId;

        /**
         * 权重值Key；用于抽奖时可以选择权重抽奖。
         */
        private String ruleWeightValueKey;

        /**
         * 奖品ID；
         */
        private Integer awardId;
    }

    // 抽奖之中
    static public class RaffleCenterEntity extends RaffleEntity {

    }

    // 抽奖之后
    static public class RaffleAfterEntity extends RaffleEntity {

    }

}
